Every file system has a storage manager that defines how blocks of memory storage are allocated and deallocated to store logically related data information. In certain applications, memory storage is logically divided into fixed, same-length blocks. For example, block sizes are typically selected so that they are small relative to the size of corresponding files that are to be stored. This is done in order to minimize waste of storage space.
To facilitate file reads and writes, blocks are sometimes allocated in sequential order so that reads and writes of a long data stream can be performed more efficiently. However, as files are created, modified, or deleted, the free space on the storage can quickly become sporadically located on a disc. Consequently, sequential block allocation of memory can become cumbersome and quite complex.